home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / A-COMAL Series / (k)aaj.d64 / src.text-1.02 < prev    next >
Text File  |  2007-02-28  |  8KB  |  483 lines

  1. ;
  2. ;--------------------------------;
  3. ;                                ;
  4. ; TEXT - A COMAL PACKAGE         ;
  5. ;                                ;
  6. ; REV. 1.02                      ;
  7. ;                                ;
  8. ; DUTCH COMAL USERS GROUP        ;
  9. ;                                ;
  10. ; LAST CHANGE 860707             ;
  11. ;                                ;
  12. ;--------------------------------;
  13. ;
  14. DEFPAG = %01000110
  15. DUMMY  = $CA2F
  16. PROC   = 112
  17. ENDPRC = 126
  18. FUNC   = 227
  19. ENDFNC = 126
  20. PSHINT = $C9CE
  21. EXCGST = $C9E0
  22. REAL   = 0
  23. INT    = 1
  24. STR    = 2
  25. REF    = 117
  26. POINT  = $FB
  27. FNDPAR = $C896
  28. COPY1  = $45
  29. COPY2  = $47
  30. COPY3  = $49
  31. COPYDN = $C8A2
  32. RUNERR = $C9FB
  33. LIBPT  = $C7EF
  34. LIBLO  = $C7F0
  35. LIBHI  = $C7FA
  36. LIBPAG = $C804
  37. ;
  38. *      = $8009
  39. ;
  40.        .BYTE DEFPAG
  41. EINDE  .WORD END
  42.        .WORD DUMMY
  43.        .BYTE 4,'TEXT'
  44.        .WORD PROCS
  45.        .WORD RESET
  46.        .BYTE 0
  47. ;
  48. PROCS  .BYTE 7,'REWRITE'
  49.        .WORD HEMPTY
  50.        .BYTE 7,'WRITELN'
  51.        .WORD HPUT
  52.        .BYTE 6,'READLN'
  53.        .WORD HGET
  54.        .BYTE 5,'RESET'
  55.        .WORD HRES
  56.        .BYTE 3,'EOT'
  57.        .WORD HEOT
  58.        .BYTE 9,'BYTESFREE'
  59.        .WORD HFREE
  60. ;
  61.  .BYTE  12,'VERSION''TEXT'
  62.  .WORD  HVERST
  63.        .BYTE 0
  64. ;
  65. HEMPTY .BYTE PROC
  66.        .WORD EMPTY
  67.        .BYTE 0
  68.        .BYTE ENDPRC
  69. ;
  70. HPUT   .BYTE PROC
  71.        .WORD PUT
  72.        .BYTE 1
  73.        .BYTE STR+REF
  74.        .BYTE ENDPRC
  75. ;
  76. HGET   .BYTE PROC
  77.        .WORD GET
  78.        .BYTE 1
  79.        .BYTE STR+REF
  80.        .BYTE ENDPRC
  81. ;
  82. HRES   .BYTE PROC
  83.        .WORD RESET
  84.        .BYTE 0
  85.        .BYTE ENDPRC
  86. ;
  87. HEOT   .BYTE FUNC+REAL
  88.        .WORD EOT
  89.        .BYTE 0
  90.        .BYTE ENDFNC
  91. ;
  92. HFREE  .BYTE FUNC+REAL
  93.        .WORD FREE
  94.        .BYTE 0
  95.        .BYTE ENDFNC
  96. ;
  97. ;--------------------------------;
  98. ; PROC REWRITE CLOSED            ;
  99. ;--------------------------------;
  100. ;
  101. EMPTY  LDA #<END
  102.        LDY #>END
  103.        STA EINDE
  104.        STY EINDE+1
  105. ;
  106. ;--------------------------------;
  107. ; PROC RESET CLOSED              ;
  108. ;--------------------------------;
  109. ;
  110. RESET  LDA #<END
  111.        LDY #>END
  112.        STA SUBPNT
  113.        STY SUBPNT+1
  114.        RTS
  115. ;
  116. ;--------------------------------;
  117. ; FUNC EOT CLOSED                ;
  118. ;--------------------------------;
  119. ;
  120. EOT    JSR TEOF
  121.        LDA #0
  122.        ROL A
  123.        TAX
  124.        LDA #0
  125.        JMP PSHINT
  126. ;
  127. ;--------------------------------;
  128. ; FUNC BYTESFREE CLOSED          ;
  129. ;--------------------------------;
  130. ;
  131. FREE   JSR MAX
  132.        LDA MAXADD
  133.        CLC
  134.        SBC EINDE
  135.        TAX
  136.        LDA MAXADD+1
  137.        SBC EINDE+1
  138.        JMP PSHINT
  139. ;
  140. ;--------------------------------;
  141. ; PROC WRITELN(STR) CLOSED       ;
  142. ;--------------------------------;
  143. ;
  144. PUT    LDA #1
  145.        JSR FNDPAR
  146. ;
  147. ; POINTER ON CURRENT LENGTH:
  148. ;              = COPY FROM!
  149. ;
  150.        LDA COPY1
  151.        CLC
  152.        ADC #<2
  153.        STA COPY1
  154.        LDA COPY1+1
  155.        ADC #>2
  156.        STA COPY1+1
  157. ;
  158. ; COPY TO = END OF PACKAGE:
  159. ;
  160.        LDA EINDE
  161.        LDY EINDE+1
  162.        STA COPY2
  163.        STY COPY2+1
  164. ;
  165. ; COPY LENGTH = CURRENT LENGTH:
  166. ;
  167.        LDY #1
  168. SETUP  LDA (COPY1),Y
  169.        STA COPY3,Y
  170.        DEY
  171.        BPL SETUP
  172. ;
  173. ; COPY3:+2 (LENGTH MUST BE SAVED):
  174. ;
  175.        JSR LEN
  176. ;
  177. ; LOOK FOR BUFFER OVERFLOW
  178. ;
  179.        JSR MAX
  180. ;
  181.        LDA COPY3+1
  182.        CLC
  183.        ADC EINDE
  184.        TAX
  185.        LDA COPY3
  186.        ADC EINDE+1
  187.        TAY
  188.        TXA
  189.        SEC
  190.        SBC MAXADD
  191.        TYA
  192.        SBC MAXADD+1
  193.        BCS OUT
  194. ;
  195. ; ELSE, SET NEW END:
  196. ;
  197.        STX EINDE
  198.        STY EINDE+1
  199. ;
  200. ; AND COPY STRING IN BUFFER
  201. ;
  202.        JMP COPYDN
  203. ;
  204. ;--------------------------------;
  205. ; ENTRIES FOR ERROR MESSAGES:    ;
  206. ; - END OF FILE                  ;
  207. ; - OUT OF MEMORY                ;
  208. ;--------------------------------;
  209. ;
  210. EOF    LDX #201
  211.        .BYTE $2C
  212. OUT    LDX #52
  213.        JMP RUNERR
  214. ;
  215. ;--------------------------------;
  216. ; TEST FOR EOT, CARRY=1 IF SO    ;
  217. ;--------------------------------;
  218. ;
  219. TEOF   LDA SUBPNT
  220.        SEC
  221.        SBC EINDE
  222.        LDA SUBPNT+1
  223.        SBC EINDE+1
  224.        RTS
  225. ;
  226. ;--------------------------------;
  227. ; PROC READLN(STR) CLOSED        ;
  228. ;--------------------------------;
  229. ;
  230. ; TEST FOR END OF BUFFER
  231. ;
  232. GET    JSR TEOF
  233.        BCS EOF
  234. ;
  235.        LDA #1
  236.        JSR FNDPAR
  237. ;
  238. ; COPY TO = COPY1 + 2:
  239. ;
  240.        LDA COPY1
  241.        CLC
  242.        ADC #<2
  243.        STA COPY2
  244.        LDA COPY1+1
  245.        ADC #>2
  246.        STA COPY2+1
  247. ;
  248. ; COPY READ POINTER TO ZEROPAGE:
  249. ;
  250.        LDA SUBPNT
  251.        LDY SUBPNT+1
  252.        STA POINT
  253.        STY POINT+1
  254. ;
  255. ; LOOK IF THE STRING IN BUFFER
  256. ; WILL FIT IN THE STRING:
  257. ;
  258.        LDY #1
  259.        LDA (COPY1),Y
  260.        SEC
  261.        SBC (POINT),Y
  262.        DEY
  263.        LDA (COPY1),Y
  264.        SBC (POINT),Y
  265.        BCC NOROOM
  266. ;
  267. ;-COPY WHOLE STRING--------------;
  268. ;
  269. ; COPY FROM = READ POINTER
  270. ;
  271.        LDA POINT
  272.        LDY POINT+1
  273.        STA COPY1
  274.        STY COPY1+1
  275. ;
  276. ; COPY LENGTH = BUF. STRING LENGTH
  277. ;
  278.        LDY #1
  279. SETUP1 LDA (POINT),Y
  280.        STA COPY3,Y
  281.        DEY
  282.        BPL SETUP1
  283. ;
  284. ; COPY3:+2 (2 BYTES FOR LENGTH):
  285. ;
  286.        JSR LEN
  287. ;
  288. ; MOVE READ POINTER OVER STRING:
  289. ;
  290.        LDA POINT
  291.        CLC
  292.        ADC COPY3+1
  293.        STA SUBPNT
  294.        LDA POINT+1
  295.        ADC COPY3
  296.        STA SUBPNT+1
  297. ;
  298. ; AND COPY STRING FROM BUFFER
  299. ;
  300.        JMP COPY
  301. ;
  302. ;-COPY FIRST PART OF STRING------;
  303. ;
  304. ; COPY LENGTH = STRING LENGTH:
  305. ;
  306. NOROOM LDA (COPY1),Y
  307.        STA COPY3
  308.        PHA
  309.        INY
  310.        LDA (COPY1),Y
  311.        STA COPY3+1
  312.        PHA
  313. ;
  314. ; COPY TO = READ POINTER
  315. ;
  316.        LDA POINT
  317.        LDY POINT+1
  318.        STA COPY1
  319.        STY COPY1+1
  320. ;
  321. ; COPY3:+2 (2 BYTES FOR LENGTH)
  322. ;
  323.        JSR LEN
  324. ;
  325. ; MOVE READ POINTER OVER STRING
  326. ;
  327.        LDY #1
  328.        LDA (POINT),Y
  329.        CLC
  330.        ADC POINT
  331.        TAX
  332.        DEY
  333.        LDA (POINT),Y
  334.        ADC POINT+1
  335.        TAY
  336.        TXA
  337.        CLC
  338.        ADC #<2
  339.        STA SUBPNT
  340.        TYA
  341.        ADC #>2
  342.        STA SUBPNT+1
  343. ;
  344. ; SET CURRENT STRING LENGTH
  345. ;
  346.        LDY #1
  347.        PLA
  348.        STA (COPY1),Y
  349.        DEY
  350.        PLA
  351.        STA (COPY1),Y
  352. ;
  353. ; AND COPY STRING
  354. ;
  355. ;--------------------------------;
  356. ; SUBROUTINE COPY FROM BENEATH   ;
  357. ; ROM. COMAL SUBROUTINES DOESN'T ;
  358. ;--------------------------------;
  359. ;
  360. COPY   LDX COPY3
  361.        LDA COPY3+1
  362.        TAY
  363.        BEQ L001
  364.        EOR #255
  365.        TAY
  366.        INY
  367.        CLC
  368.        LDA COPY1
  369.        ADC COPY3+1
  370.        STA COPY1
  371.        BCS L002
  372.        DEC COPY1+1
  373. L002   CLC
  374.        LDA COPY2
  375.        ADC COPY3+1
  376.        STA COPY2
  377.        BCS L003
  378.        DEC COPY2+1
  379. L003   LDA (COPY1),Y
  380.        STA (COPY2),Y
  381.        INY
  382.        BNE L003
  383.        INC COPY1+1
  384.        INC COPY2+1
  385. L001   DEX
  386.        BPL L003
  387.        RTS
  388. ;
  389. ;--------------------------------;
  390. ; SUBROUTINE ADD 2 TO COPY3      ;
  391. ;--------------------------------;
  392. ;
  393. LEN    LDA COPY3+1
  394.        CLC
  395.        ADC #<2
  396.        STA COPY3+1
  397.        LDA COPY3
  398.        ADC #>2
  399.        STA COPY3
  400.        RTS
  401. ;
  402. ;--------------------------------;
  403. ; SUBROUTINE CALCULATE MAX'ADD   ;
  404. ;--------------------------------;
  405. ;
  406. MAX    LDA #<$C000
  407.        LDY #>$C000
  408.        STA MAXADD
  409.        STY MAXADD+1
  410. ;
  411.        LDX LIBPT
  412. MAXLP  DEX
  413.        BPL MXSRCH
  414.        RTS
  415. ;
  416. MXSRCH LDA LIBPAG,X
  417.        AND #%11000111
  418.        CMP #%01000100
  419.        BEQ MAXOK
  420.        CMP #%01000101
  421.        BEQ MAXOK
  422.        CMP #%01000110
  423.        BNE MAXLP
  424. ;
  425. MAXOK  LDA LIBLO,X
  426.        SEC
  427.        SBC MAXADD
  428.        LDA LIBHI,X
  429.        SBC MAXADD+1
  430.        BCS MAXLP
  431. ;
  432.        LDA LIBLO,X
  433.        SEC
  434.        SBC #<END
  435.        LDA LIBHI,X
  436.        SBC #>END
  437.        BCC MAXLP
  438. ;
  439.        LDA LIBLO,X
  440.        LDY LIBHI,X
  441.        STA MAXADD
  442.        STY MAXADD+1
  443.        BNE MAXLP
  444. ;
  445. ;--------------------------------;
  446. ; VERSION NUMBER                 ;
  447. ;--------------------------------;
  448. ;
  449. HVERST .BYTE FUNC+STR
  450.   .WORD VERSTR
  451.   .BYTE 0
  452.   .BYTE ENDFNC
  453. ;
  454. VERSTR LDA #VERST3-VERST2+2
  455.  JSR EXCGST
  456.  LDY #0
  457. VERST1 LDA VERST2,Y
  458.  STA (COPY2),Y
  459.  INY
  460.  CPY #VERST3-VERST2
  461.  BNE VERST1
  462.  LDA #0
  463.        STA (COPY2),Y
  464.  LDA #VERST3-VERST2
  465.  INY
  466.  STA (COPY2),Y
  467.  RTS
  468. ;
  469. VERST2 .BYTE ' 1.02 TEXT PACKAGE'
  470.  .BYTE ' BY MARCEL BOKHORST'
  471. VERST3
  472. ;
  473. ;--------------------------------;
  474. ; SOME VARIABLES                 ;
  475. ;--------------------------------;
  476. ;
  477. SUBPNT .WORD 0
  478. MAXADD .WORD 0
  479. ;
  480. ; AND FINALLY THE
  481. ;
  482. END    .END
  483.